const { merge } = require("webpack-merge");
const common = require("./webpack.common.js");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const TerserWebpackPlugin = require('terser-webpack-plugin');
const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');

module.exports = merge(common, {
  // 设置为生产模式
  mode: 'production',
  devtool: 'source-map',
  optimization: {
    minimizer: [
      new CssMinimizerPlugin(),
      new TerserWebpackPlugin({
        terserOptions: {
          compress: {
            drop_console: false, // 默认false，设置为true, 则会删除所有console.* 相关的代码。
            pure_funcs: ['console.log'] // 单纯禁用console.log
          }
        }
      })
    ], //优化/压缩css
    usedExports: true, // 开启treeshaking
    minimize: true, //启用压缩
    emitOnErrors: false, // 开启后打包出错不中断，将错误发送到静态资源
    realContentHash:false, // hash加密打包
    mangleWasmImports: true, // 在设置为 true 时，告知 webpack 通过将导入修改为更短的字符串，来减少 WASM 大小。这会破坏模块和导出名称
    sideEffects: true //清理副作用引用与导出
  },
  performance: {
    hints: 'warning', // 枚举
    maxAssetSize: 30000000, // 整数类型（以字节为单位）
    maxEntrypointSize: 50000000, // 整数类型（以字节为单位）
    assetFilter: function (assetFilename) {
      // 提供资源文件名的断言函数
      assetFilename.endsWith('.js');
    }
  },
  // 配置相应的插件
  plugins: [
    // 压缩图片
    new ImageMinimizerPlugin({
      minimizer: {
        implementation: ImageMinimizerPlugin.squooshMinify
      }
    })
  ]
});
